package com.bbtShop.service;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bbtShop.config.BizException;
import com.bbtShop.core.model.*;
import com.bbtShop.dao.PaySourceMapper;
import com.bbtShop.dao.ProductMapper;
import com.bbtShop.dao.ProductViewMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

/**
 * @author : manke
 * @Description
 * @Date: 2020/10/23 19:52
 */
@Service
public class PaySourceService {


    @Autowired
    private PaySourceMapper paySourceMapper;

    public IPage<PaySource> getPayList(Integer pageNum, Integer pageSize,
                                       PaySource paySource) {
        IPage<PaySource> page = new Page<>(pageNum == null ? 1 : pageNum,
                pageSize == null ? 10 : pageSize);
        LambdaQueryWrapper<PaySource> productLambdaQueryWrapper = new LambdaQueryWrapper<>();
        if (paySource.getSourceDate() != null) {
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM");
            String format = simpleDateFormat.format(paySource.getSourceDate());
            productLambdaQueryWrapper.like(PaySource::getSourceDate, format);
        }
        return paySourceMapper.selectPage(page, productLambdaQueryWrapper);

    }

    public void addUpdatePay(PaySource paySource) {
        if (paySource.getId() == null) {
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
            String format = simpleDateFormat.format(paySource.getSourceDate());
            List<PaySource> paySources = paySourceMapper.selectList(new LambdaQueryWrapper<PaySource>().eq(PaySource::getSourceDate, format));
            if (paySources.size()>0){
                throw new BizException(ResultCode.PRODUCT_NOT_ALLOW);
            }
            paySource.setAddTime(new Date());
            paySource.setAmountMoney(initPay(paySource));
            paySourceMapper.insert(paySource);

        } else {
            paySourceMapper.updateById(paySource);
            //更余额
            paySource = paySourceMapper.selectById(paySource.getId());
            paySource.setAmountMoney(initPay(paySource));
            paySourceMapper.updateById(paySource);

        }

    }
    private BigDecimal initPay(PaySource paySource){
        BigDecimal zeno = new BigDecimal(0);
        return (paySource.getMoneyA() == null ? zeno : paySource.getMoneyA())
                .add(paySource.getMoneyB() == null ? zeno : paySource.getMoneyB())
                .add(paySource.getMoneyC() == null ? zeno : paySource.getMoneyC())
                .add(paySource.getMoneyD() == null ? zeno : paySource.getMoneyD())
                .add(paySource.getMoneyE() == null ? zeno : paySource.getMoneyE())
                .add(paySource.getMoneyF() == null ? zeno : paySource.getMoneyF())
                .add(paySource.getMoneyG() == null ? zeno : paySource.getMoneyG())
                .add(paySource.getMoneyH() == null ? zeno : paySource.getMoneyH())
                .add(paySource.getMoneyI() == null ? zeno : paySource.getMoneyI())
                .add(paySource.getMoneyJ() == null ? zeno : paySource.getMoneyJ())
                .add(paySource.getMoneyK() == null ? zeno : paySource.getMoneyK())
                .add(paySource.getMoneyL() == null ? zeno : paySource.getMoneyL())
                .add(paySource.getMoneyM() == null ? zeno : paySource.getMoneyM());
    }

    public void delPay(Ids ids) {
        paySourceMapper.deleteBatchIds(ids.getIds());

    }

    public PaySource getPayInfo(Integer id) {
        return paySourceMapper.selectById(id);

    }
}
